/**
 * 数轴上有蚂蚁，方向分左右，速度均为1，[0, T]时间段进行运动
 * 问有多少对蚂蚁会互相穿过
 * 令RIGHT是朝向右边的蚂蚁群，以之为参考系，对每一个朝向左边的蚂蚁i而言，T时间段内能走过的距离就是Xi-T-T
 * 看这段距离能越过多少蚂蚁即可。
 * 然后左右互换再算一遍
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;
using vll =vector<llt>;
using pii = pair<int, int>;
using vpii = vector<pii>;

int const INF = 3;

template<typename T>
istream & operator >> (istream & is, vector<T> & v){
	for(auto & i : v) is >> i;
	return is;
}

template<typename T>
void input(vector<T> &v, int n){
	v.assign(n + 1, {});
	for(int i=1;i<=n;++i) cin >> v[i];
	return;
}

int N, T;
vll X;
string S;

vll A[2];

void work(){
    cin >> N >> T >> S;
	S = " " + S;
	input(X, N);
    for(int i=1;i<=N;++i){
        A[S[i] - '0'].push_back(X[i]);
	}

	sort(A[0].begin(), A[0].end());
	sort(A[1].begin(), A[1].end());

    llt ans = 0;
	for(auto i : A[0]){
        auto tmp = i - T - T;
		auto p = equal_range(A[1].begin(), A[1].end(), tmp);
		auto t = equal_range(A[1].begin(), A[1].end(), i);
		tmp = t.first - p.first;
		ans += tmp;
	}

	for(auto i : A[1]){
		auto tmp = i + T + T;
		auto p = equal_range(A[0].begin(), A[0].end(), tmp);
		auto t = equal_range(A[0].begin(), A[0].end(), i);
        tmp = p.second - t.first;
		ans += tmp;
	}

	cout << ans / 2 << endl;
    return;
}

int main() {
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int nofkase = 1;
    // cin >> nofkase;
    while(nofkase--) work();
    return 0;
}